package com.example.demo1.controller;
import com.example.demo1.common.AppVariable;
import com.example.demo1.common.PasswordUtils;
import com.example.demo1.common.ResultAjax;
import com.example.demo1.model.UserInfo;
import com.example.demo1.service.UserService;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 言初
 * Date: 2024-06-19
 * Time: 18:16
 */
@RestController
@RequestMapping("/user")
public class UserController {
    //把service注入进来
    @Autowired
    private UserService userService;


    @RequestMapping("/reg") // 注册功能
    public ResultAjax reg(UserInfo userInfo){
        // 1.校验参数
        // 用户名和密码都不能为空
        // StringUtils.hasLength 方法就是来判断一个字符串是非空并且不等于null的时候会返回true
        if(userInfo==null || !StringUtils.hasLength(userInfo.getUsername())
                || !StringUtils.hasLength(userInfo.getPassword())){
            //参数异常
            return ResultAjax.fail(-1,"非法参数");
        }

        // 对密码进行加盐加密
        userInfo.setPassword(PasswordUtils.encrypt(userInfo.getPassword()));

        // 2. 请求service进行数据库添加操作
        // controller 调用 service，service调用mapper
        int result = userService.reg(userInfo);
        // 3. 将执行结果返回给前端
        return ResultAjax.succ(result);
    }



    // 登录功能
    @RequestMapping("/login")
    public ResultAjax login(UserInfo userInfo, HttpServletRequest requset){
            // 检验参数
        if(userInfo == null || !StringUtils.hasLength((userInfo.getUsername()))
        ||!StringUtils.hasLength((userInfo.getPassword()))){
            // 非法登录
            return ResultAjax.fail(-1,"参数有误");
        }
        // 根据用户名查询对象
        UserInfo userInfo1 = userService.getUserByName(userInfo.getUsername());
        if(userInfo1 == null || userInfo1.getId() == 0){
            //不存在此用户
            return ResultAjax.fail(-2,"用户不存在");
        }
        // 使用对象中的密码和用户输入的密码进行比较
        // 对用户输入的登录密码进行加密并与数据库中的密码进行比较
        if(!PasswordUtils.decrypt(userInfo.getPassword(),userInfo1.getPassword())){
            //密码错误
            return ResultAjax.fail(-2,"用户名或密码错误！");
        }
        // 比较成功之后，将对象存储到session中
        // 这个方法默认就是true（true的意思就是，有session你就给我拿一个session，
        // 没有session你就创建一个新的session给我）
        HttpSession session = requset.getSession();
        session.setAttribute(AppVariable.SESSION_USERINFO_KEY,userInfo1);
        // 将结果返回给用户
        return ResultAjax.succ(1);
    }




    // 为了验证ResponseBodyAdvice 类的执行效果(保底的返回值的处理)
   /* @RequestMapping("/test")
    public int test(){
        return 3;
    }*/



    // 退出登录的功能
    @RequestMapping("/logout")
    public ResultAjax logout(HttpServletRequest request){
        HttpSession session = request.getSession(false);
        if(session!=null && session.getAttribute(AppVariable.SESSION_USERINFO_KEY)!=null){
            session.removeAttribute(AppVariable.SESSION_USERINFO_KEY);
        }
        return ResultAjax.succ(1);
    }



    //

}











